﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using SOM.AbstractDALFactory;
using SOM.Common;
using SOM.ConcreteBL;
using SOM.ConcreteDAL;
using SOM.ConcreteDALFactory;
using SOM.Facade;
using SOM.Model;

public partial class Reclamacao_ReclamacaoDetalhes : System.Web.UI.Page
{

    #region Propriedades
    private int IdReclamacao
    {
        get
        {
            if (Request["recId"] != null)
            {
                return int.Parse(SOM.Security.SOMSecurity.Decodificar(Request["recId"]));
            }
            else
            {
                throw new Exception("Reclamação não encontrada");
            }
        }
    }

    private TipoOperacao TipoOperacao
    {
        get
        {
            if (Request["op"] != null)
            {
                return (TipoOperacao)Convert.ToInt32(Request["op"]);
            }
            else
            {
                return TipoOperacao.Cadastro;
            }
        }
    }

    private int CurrentPage
    {
        get
        {
            object o = this.ViewState["_CurrentPageComentarios"];
            if (o == null || (int)o < 0)
                return 0;

            return (int)o;
        }

        set
        {
            this.ViewState["_CurrentPageComentarios"] = value;
        }
    }
    #endregion


    protected void Page_Load(object sender, EventArgs e)
    {
        if (Common.RetornarUsuarioSessao(this) == null)
        {
            FormsAuthentication.RedirectToLoginPage();
            return;
        }

        if (!IsPostBack)
        {
            if (TipoOperacao == TipoOperacao.Visualizacao)
            {
                AtualizarReclamacao();
                AtualizarComentarios();
            }
        }
    }

    protected void btnSalvarComentario_Click(object sender, EventArgs e)
    {
        try
        {
            SOMAbstractDALFactory factory = new SOMConcreteDALFactory();
            ReclamacaoDAL reclamacaoDAL = factory.CreateReclamacaoDAL();

            Reclamacao reclamacao = reclamacaoDAL.FindById(IdReclamacao);
            Usuario usuario = Common.RetornarUsuarioSessao(this);

            if (reclamacao != null)
            {
                Comentario comentario = new Comentario();
                comentario.com_ds_comentario = Server.HtmlEncode(txtAdicionarComentario.Text.Replace("\n", "<br/>"));
                comentario.com_ds_email = usuario.usr_ds_email;
                comentario.com_ds_usuario = usuario.usr_ds_nickname;
                comentario.com_dt_data = DateTime.Now;
                reclamacao.com_comentario.Add(comentario);
                reclamacaoDAL.Update(reclamacao);
                AtualizarComentarios();
                LimparControles();
            }
        }
        catch (Exception ex)
        {
            throw new InvalidProgramException("Ocorreu um erro ao salvar seu comentário", ex);
        }
    }

    protected void btnLimparComentario_Click(object sender, EventArgs e)
    {
        LimparControles();
    }



    #region Métodos Privados
    private void AtualizarComentarios()
    {
        //Faz a paginacao
        PagedDataSource pagedDataSource = new PagedDataSource();
        pagedDataSource.AllowPaging = true;
        pagedDataSource.PageSize = 10;
        pagedDataSource.DataSource = ComentarioBL.FindByIdReclamacao(IdReclamacao);
        pagedDataSource.CurrentPageIndex = CurrentPage;

        if (pagedDataSource.PageCount == 1 && CurrentPage + 1 == 1)
        {
            lblPaginaAtual.Visible = false;
        }
        else
        {
            lblPaginaAtual.Visible = true;
        }

        cmdAnterior.Visible = !pagedDataSource.IsFirstPage;
        cmdProximo.Visible = !pagedDataSource.IsLastPage;

        rptComentarios.DataSource = pagedDataSource;
        rptComentarios.DataBind();
    }

    protected void cmdProximo_Click(object sender, ImageClickEventArgs e)
    {
        CurrentPage++;
        AtualizarComentarios();
    }

    protected void cmdAnterior_Click(object sender, ImageClickEventArgs e)
    {
        CurrentPage--;
        AtualizarComentarios();
    }

    private void AtualizarReclamacao()
    {
        SOMAbstractDALFactory factory = new SOMConcreteDALFactory();
        ReclamacaoDAL reclamacaoDAL = factory.CreateReclamacaoDAL();
        Reclamacao reclamacao = reclamacaoDAL.FindById(IdReclamacao);
        List<Reclamacao> reclamacaoList = new List<Reclamacao>();
        reclamacaoList.Add(reclamacao);

        if (reclamacao != null)
        {
            //frvReclamacao.DataSource = reclamacaoList;
            List<FacadeReclamacao> facadeReclamacaoList = new List<FacadeReclamacao>();
            facadeReclamacaoList.Add((new ReclamacaoBL().FindById(IdReclamacao)));
            frvReclamacao.DataSource = facadeReclamacaoList;
            frvReclamacao.DataBind();
        }
    }

    private void LimparControles()
    {
        txtAdicionarComentario.Text = string.Empty;
    }
    #endregion
    protected void frvReclamacao_DataBound(object sender, EventArgs e)
    {
        HyperLink hplVerMapa = (HyperLink)frvReclamacao.FindControl("hplVerMapa");

        hplVerMapa.NavigateUrl =
            "javascript:AbrirPopup(\"../Reclamacao/PopupReclamacaoLocalizacao.aspx?op=1&recId=" +
           IdReclamacao + "\")";
    }
}
